import axios from 'axios'
import store from '@/store'
import storage from 'store'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { message } from 'ant-design-vue'
import moment from 'moment'

export function uploadFile (params) {
  const { file } = params
  const formData = new FormData()
  formData.append('file', file)
  // 使用自定义axios实现进度条
  return new Promise((resolve, reject) => {
    axios({
      method: 'post',
      url: process.env.VUE_APP_API_BASE_URL + '/api/uploadpictures/UploadPictures',
      headers: {
        'Content-Type': 'multipart/form-data',
        'Authorization': storage.get(ACCESS_TOKEN),
        'GF': store.getters.userid
      },
      data: formData,
      // 计算当前文件上传进度
      onUploadProgress: (progressEvent) => {
        const num = progressEvent.loaded / progressEvent.total * 100 | 0
        params.onProgress({ percent: num })
      }
    }).then(res => {
      message.success('文件上传成功')
      // 调用axios上传成功方法改变当前文件状态
      params.onSuccess()
      // 传递参数 返回上传成功的文件路径、当前上传的文件参数名称、文件参数类型
      resolve(res)
    }).catch((err) => {
      message.error('文件上传失败，请稍后重试')
      params.onError()
      reject(err)
    })
  })
}

/**
 * 上传文件构造数组
 * @param {String} FILE 文件上传成功的路径（必需）
 * @param {String} ID 文件ID
 * @param {String} TID 上传关联表ID
 * @param {String} TNAME 上传关联表名称 （必需）
 * @param {String} USERNAME 当前上传的用户名 （必需）
 * @param {Number} CS_WJLX 参数文件类型
 * @param {String} CS_WJMC 参数文件名称
 * @returns {Array}
 */
 export function structureArray (fileData) {
  const fileLists = fileData.FILE || []
  const newFileList = []
  fileLists.forEach((item, index) => {
    newFileList.push({
      ID: item.ID || fileData.ID || '',
      TID: item.TID || fileData.TID || '',
      TNAME: item.TNAME || fileData.TNAME || '',
      WJMC: item.WJMC || fileData.WJMC || item.substring(item.indexOf('/') + 7, item.lastIndexOf('.')),
      WJLX: item.WJLX || item.substring(item.lastIndexOf('.') + 1),
      WJLJ: item.WJLJ || item,
      WJSM: item.WJSM || '',
      SCSJ: item.SCSJ || moment().format('YYYY-MM-DD'),
      SCYH: item.SCYH || fileData.USERNAME || '',
      Mode: item.Mode || 0,
      CS_WJLX: item.CS_WJLX || fileData.CS_WJLX || '',
      CS_WJMC: item.CS_WJMC || fileData.CS_WJMC || '',
      PX: index
    })
  })
  return newFileList
}
